﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;

namespace Modelo.Seguridad
{
    public class CatalogoFormularios
    {
        

        private List<Entidades.Seguridad.Formulario> ColFormularios;

        public CatalogoFormularios()
        {
            ColFormularios = Mapping.Seguridad.MappingFormularios.ConsultarFormularios();
        }

        public Entidades.Seguridad.Formulario BuscarFormulario(string idForm)
        {
            return this.ColFormularios.Find(oForm => oForm.IdFormulario == idForm);
        }

        public ReadOnlyCollection<Entidades.Seguridad.Formulario> ListarFormularios()
        {
            return ColFormularios.AsReadOnly();
        }


        public ReadOnlyCollection<Entidades.Seguridad.Formulario> ListarFormularios(string nombre)
        {
            var query = from form in ColFormularios
                        where (form.Nombre.ToLower().Contains(nombre.ToLower()))
                        select form;

            return query.ToList().AsReadOnly();
        }

        public void ModificarFormulario(Entidades.Seguridad.Formulario oFormulario)
        {
            Mapping.Seguridad.MappingFormularios.ModificarFormulario(oFormulario);
            ColFormularios.Remove(oFormulario);
            ColFormularios.Add(oFormulario);
        }

        public bool AgregarFormulario(Entidades.Seguridad.Formulario oFormulario)
        {
            ColFormularios.Add(oFormulario);
            return Mapping.Seguridad.MappingFormularios.AgregarFormulario(oFormulario);
        }

        public bool EliminarFormulario(Entidades.Seguridad.Formulario oFormulario)
        {
            Mapping.Seguridad.MappingFormularios.EliminarFormulario(oFormulario);
            ColFormularios.Remove(oFormulario);
            return true;
        }

        public bool ValidarExistencia(Entidades.Seguridad.Formulario oFormulario)
        {
            if (this.ColFormularios.Count(oForm => oForm.Nombre == oFormulario.Nombre) == 0)
            {
                return true;
            }
            
            return false;
        }

        public bool ValidarPermisoFormulario(Entidades.Seguridad.Permiso oPermiso)
        {
            var query = from form in ColFormularios
                        from perm in form.Permisos
                        where perm.IdPermiso == oPermiso.IdPermiso
                        select form;

            if (query.ToList().Count > 0)
            {
                return false;
            }
            return true;
        }


        public Int32 GetMayor()
        {
            var maxIdFormulario = (from q in ColFormularios select q).ToList().Max(x => Convert.ToInt32(x.IdFormulario));
            return Convert.ToInt32(maxIdFormulario);
        }
    }
}
